package com.zs.propertymanage.service.impl;

import com.zs.propertymanage.dataObj.R;
import com.zs.propertymanage.dataObj.entity.Employee;

public interface EmployeeService {

    /**
     * 获取所有员工
     *
     * @return 所有员工
     */
    R getAllEmployee();

    /**
     * 获取带有额外信息的员工列表
     *
     * @param search      搜索关键字
     * @param currentPage 当前页码
     * @param size        每页显示数量
     * @return 带有额外信息的员工列表
     */
    R getAllEmployeeWithExtra(String search, Integer currentPage, Integer size);

    /**
     * 获取所有组织
     *
     * @return 所有组织
     */
    R getAllEmployeeOrg();

    /**
     * 获取所有角色
     *
     * @return 所有角色
     */
    R getAllEmployeeRole();

    /**
     * 添加员工
     *
     * @param employee 待添加的员工
     * @return 添加结果
     */
    R addEmployee(Employee employee);

    /**
     * 更新员工信息
     *
     * @param employee 待更新的员工
     * @return 更新结果
     */
    R updateEmployee(Employee employee);

    /**
     * 删除员工
     *
     * @param id 员工ID
     * @return 删除结果
     */
    R deleteEmployee(String id);

    /**
     * 删除角色信息
     *
     * @param id 角色ID
     * @return 删除结果
     */
    R deleteEmployeeRoleById(Integer id);

    /**
     * 添加角色
     *
     * @param roleName 待添加的角色名
     * @return 添加结果
     */
    R addEmployeeRole(String roleName);

    /**
     * 删除组织信息
     *
     * @param id 组织ID
     * @return 删除结果
     */
    R deleteEmployeeOrgById(Integer id);

    /**
     * 添加员工组织
     *
     * @param orgName 组织名称
     * @return 添加结果
     */
    R addEmployeeOrg(String orgName);

    /**
     * 获取未被接收的工作订单
     *
     * @return 未被接收的工作订单
     */
    R getUnreceivedWorkOrder(String employeeId);

    /**
     * 根据员工ID和工单号接收工单
     *
     * @param employeeId  员工ID
     * @param workOrderId 工单号
     * @return 处理结果
     */
    R receiveWorkOrder(String employeeId, String workOrderId);

    /**
     * 根据员工ID获取已接收的工单
     *
     * @param employeeId 员工ID
     * @return 已接收的工单
     */
    R getReceivedWorkOrder(String employeeId, String search, Integer currentPage, Integer pageSize);

    /**
     * 处理工单
     *
     * @param employeeId   员工ID
     * @param workOrderId  工单ID
     * @param handleRemark 处理备注
     * @return 处理结果
     */
    R handleWorkOrder(String employeeId, String workOrderId, String handleRemark);

    /**
     * 根据员工ID获取该员工的工单和巡查统计概览
     *
     * @param employeeId 员工ID
     * @return 统计概览
     */
    R getStatByEmployee(String employeeId);

    /**
     * 获取格式化的员工列表
     * 具体为按照组织和按照角色将员工分类
     *
     * @return 格式化的员工列表
     */
    R getEmployeeByRole();

    // 根据id获取员工
    R getEmployeeById(String id);

}
